package com.ag.oa.core.dao;


import com.ag.oa.core.entity.vo.TaskVO;
import com.ag.oa.core.entity.vo.UserVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * Author:   wjc
 * Date:     2021/10/25
 * Description:
 */
@Repository("taskDao")
public interface ITaskDao {

    List<TaskVO> getForPageList(@Param("projectId") Integer projectId, @Param("offset") Integer offset
            , @Param("pageSize") Integer pageSize);

    /**
     * 创建任务
     */
    void createTask(TaskVO taskVO);

    /**
     * 创建任务的人，就是第一个任务用户，也就是发起人
     */
    void createTaskFirstUser(TaskVO taskVO);

    /**
     * 查询任务列表
     */
    List<TaskVO> findTaskList(TaskVO taskVO);

    /**
     * 保存评论
     */
    void saveForum(@Param("userId") Integer userId, @Param("taskId") Integer taskId
            , @Param("content") String contentStr);

    /**
     * 获取用户所有的项目任务列表信息
     */
    List<Map> getUserAllTaskProjectList(@Param("userId") Integer userId);

    /**
     * 分页获取用户的任务
     */
    List<Map> getUserAllTaskList(@Param("userId") Integer userId);

    /**
     * 获取任务积分, 并区分显示到所在的项目上显示
     */
    List<Map> getProjectTaskScoreDataList(@Param("userId") Integer userId);

    /**
     * 根据任务id，获得任务信息
     */
    TaskVO getTaskById(@Param("taskId") Integer taskId);

    /**
     * 获取任务的用户状态
     * 主要为了识别当前操作人： 是否领取、是否完成、是否负责人
     */
    TaskVO getTaskUserStatus(@Param("taskId") Integer taskId, @Param("userId") Integer userId);

    /**
     * 修改任务状态
     */
    void updateTaskStatus(TaskVO vo);

    /**
     * 修改任务描述
     */
    void updateTaskDesc(TaskVO vo);

    /**
     * 添加任务成员，领取与指派
     * 1. 可以同时添加多个普通成员
     * 2. task_id,user_id相同则忽略处理
     */
    void createTaskUsers(TaskVO vo);

    /**
     * 完成任务操作
     */
    void updateCompleteTask(TaskVO vo);

    /**
     * 主要根据任务id，查出所有任务成员
     * 按照创建时间倒序
     */
    List<TaskVO> findTaskUserById(@Param("taskId") Integer taskId, @Param("completeStatus") Integer completeStatus);

    /**
     * 指派任务成员，添加任务成员使用，初始化列表以及查询
     *
     * 1. 排除任务中已添加的成员
     * 2. 排除teamTalk系统默认用户
     * 3. 合格的用户（昵称、手机号符合规范的）
     * @param username 指定查询的昵称
     */
    List<UserVO> getTaskUserCheckDataList(@Param("username") String username, @Param("taskId") Integer taskId
            , @Param("limitCount") Integer limitCount);


    /**
     * 修改任务成员的职责(目前可以修改这两种， 1：负责人 2：普通成员)
     */
    void updateTaskResp(TaskVO vo);


    /**
     * 根据任务id，获取所有负责人id
     */
    List<Integer> getManagerUserIdByTaskId(@Param("taskId") Integer taskId);

    /**
     * 最新任务
     * 获取最新的10条，正在运行的任务
     */
    List<TaskVO> getNewRunTaskTop10();

}
